home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks '96 / Internet Chooser / reggie / light / test.cpp < prev   
Encoding:
C/C++ Source or Header  |  1996-06-21  |  3.4 KB  |  114 lines  |  [TEXT/MMCC]

  1. // File "test.cpp" -
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. #include "stdtypes.h"
  8. #include "stddebug.h"
  9.  
  10. #include "datagram.h"
  11. #include "platform.h"
  12. #include "socket.h"
  13.  
  14. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  15. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  16. /* Function Prototypes */
  17.  
  18. PROTO SocketResult Lookup(SocketAddress &address);
  19. PROTO SocketResult Ping(SocketAddress &address, char *buffer);
  20. PROTO SocketResult RecordPacket(DatagramSocketRef socket, char *buffer,
  21.         Byte8 *dataPtr, UInt32 dataLen, SocketAddressPtr address);
  22.  
  23. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  24. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  25.  
  26. void main() {
  27.     char buffer[ARBITRARY_BUFFER_SIZE] = "";
  28.     SocketAddress address;
  29.  
  30. #if defined(PLATFORM_MAC)
  31.     printf("Initializing Quickdraw\n");
  32. #endif
  33.  
  34.     Lookup(address);
  35.     Ping(address, buffer);
  36.     if (*buffer)
  37.         printf("%s", buffer);
  38.  
  39. #if defined(PLATFORM_MAC)
  40.     printf("\n--- End of run ---\n");
  41. #endif
  42.     }
  43.     
  44. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  45. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  46.  
  47. SocketResult Lookup(SocketAddress &address) {
  48.     SocketResult error = eSocketNoError;
  49.     Char8 hostname[ARBITRARY_BUFFER_SIZE] = "alumni";
  50.  
  51.     qThrowIfError(ResolveNetworkAddress(eSocketTypeUDP, hostname, 
  52.             &address), "Error resolving host name");
  53.  
  54. /*
  55.     address.type = eSocketTypeUDP;
  56.     address.length = sizeof(address.buffer.tcpip);
  57.     address.buffer.tcpip.type = AF_INET;
  58.     address.buffer.tcpip.port = 13;
  59.     address.buffer.tcpip.host = 0x8DD4540F;
  60.     memset(address.buffer.tcpip.data, 0,sizeof(address.buffer.tcpip.data));
  61. */
  62.     qThrowIfError(LookupNetworkAddress(&address, hostname),
  63.             "Error looking up host name");
  64.     printf("Sending ping to \"%s\"\n", hostname);
  65.  
  66.     address.buffer.tcpip.port = 13;
  67.  
  68. /* CATCH */
  69.     qCatch();
  70.     return(error);
  71.     }
  72.  
  73. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  74. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  75.  
  76. SocketResult Ping(SocketAddress &address, char *buffer) {
  77.     SocketResult error = eSocketNoError;
  78.     DatagramSocket socket;
  79.     UInt32 i;
  80.  
  81.     qThrowIfNull(buffer, eSocketErrBadParam, kSocketErrBadParamStr);
  82.     *buffer = 0;
  83.     
  84.     qThrowIfError(socket.SetReadProc((DatagramReadProc) RecordPacket, 
  85.             (void *) buffer), "Error installing read proc");
  86.     
  87.     qThrowIfError(socket.Create(address.type), "Error creating socket");
  88.     qThrowIfError(socket.EnableLogging("logfile.txt", true),
  89.             "Error enabling logfile");
  90.     qThrowIfError(socket.Bind(0,0), "Error binding socket");
  91.     qThrowIfError(socket.Write(0,0,&address), "Error writing to socket");
  92.     for(i=0; !*buffer && i<10000; i++)
  93.         qThrowIfError(socket.Tickle(), "Error tickling socket");
  94.     qThrowIfError(socket.Unbind(), "Error unbinding socket");
  95.     qThrowIfError(socket.DisableLogging(), "Error disabling logfile");
  96.     qThrowIfError(socket.Dispose(), "Error disposing socket");
  97.  
  98.  
  99. /* CATCH */
  100.     qCatch();
  101.     return(error);
  102.     }
  103.     
  104. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  105. /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
  106.  
  107. SocketResult RecordPacket(DatagramSocketRef socket, char *buffer,
  108.         Byte8 *dataPtr, UInt32 dataLen, SocketAddressPtr address) {
  109.     memcpy(buffer, dataPtr, dataLen);
  110.     buffer[dataLen] = 0;
  111.     return(eSocketNoError);
  112.     }
  113.  
  114.